package org.bookie.model;

import java.util.Date;
import java.util.List;

/**
 * Interface modelling a bet slip of an {@link User}. A bet slip contains at least
 * one {@link Wager} and a stake. The profit of the bet slip is calculated
 * depending on the stake and the betting success.
 * 
 * @author Igor Drobiazko
 * 
 */
public interface IBetSlip {

	/**
	 * Get the total odds of the BetSlip.
	 */
	public Double getTotalOdds();

	/**
	 * Get the total stake of the BetSlip.
	 */
	public Double getTotalStake();

	/**
	 * Get the maximal possible profit. This profit is calculated depending on
	 * the stake and the total odds. In many cases it will differ from the real
	 * profit.
	 */
	public Double getMaximalProfit();

	/**
	 * Get whether the BetSlip is closed.
	 * 
	 * @return <code>true</code> if the Event of every Bet of this BetSlip has
	 *         a successful Bet.
	 */
	public boolean isClosed();
	
	/**
	 * Get whether the BetSlip is successful.
	 */
	public boolean isSuccessful();

	/**
	 * Get the list of {@link Wager}s.
	 */
	public List<Wager> getBets();

	/**
	 * Get the stake {@link User} placed
	 */
	public Double getStake();
	
	/**
	 * Get the balance of the BetSlip.
	 */
	public Double getBalance();

	/**
	 * Get the owner of this BetSlip
	 * 
	 * @return instance of User
	 */
	public User getUser();

	/**
	 * Get the current profit of the BetSlip.
	 */
	public Double getProfit();

	/**
	 * Get the date BetSlip was placed
	 * 
	 * @return instance of Date
	 */
	public Date getDate();

}